]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
tests: Port insertSorted() test to jasmine
authorFlorian Müllner <fmuellner@gnome.org>
Sat, 20 Jan 2024 07:00:39 +0000 (08:00 +0100)
committerMarge Bot <marge-bot@gnome.org>
Tue, 21 May 2024 13:42:28 +0000 (13:42 +0000)
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3164>

tests/meson.build
tests/unit/insertSorted.js

index 9c8c6ca8399b4a090d2873761e6683475c815728..5adfcffe8740fde18cd9bc2c3f679c422bec3e66 100644 (file)
@@ -22,6 +22,7 @@ unit_testenv.append('GI_TYPELIB_PATH', st_typelib_path, separator: ':')
 unit_tests = [
     'highlighter',
     'injectionManager',
+    'insertSorted',
 ]
 
 foreach test : unit_tests
@@ -40,7 +41,6 @@ foreach test : unit_tests
 endforeach
 
 legacy_tests = [
-    'insertSorted',
     'jsParse',
     'markup',
     'params',
index ec7e2095f8d399f0b2304d97a20d7b6dabfc4fc1..2bd598d94da5ebf2f282e35b5d880b3d36654f33 100644 (file)
@@ -6,53 +6,59 @@
 // we don't actually use
 import 'resource:///org/gnome/shell/ui/environment.js';
 
-import * as Assertions from '../common/assertions.js';
-
-import * as Util from 'resource:///org/gnome/shell/misc/util.js';
-
-let arrayInt = [1, 2, 3, 5, 6];
-Util.insertSorted(arrayInt, 4, (one, two) => one - two);
-
-Assertions.assertArrayEquals('first test', [1, 2, 3, 4, 5, 6], arrayInt);
-
-// no comparator, integer sorting is implied
-Util.insertSorted(arrayInt, 3);
-
-Assertions.assertArrayEquals('second test', [1, 2, 3, 3, 4, 5, 6], arrayInt);
-
-let obj1 = {a: 1};
-let obj2 = {a: 2, b: 0};
-let obj3 = {a: 2, b: 1};
-let obj4 = {a: 3};
-
-let arrayObj = [obj1, obj3, obj4];
-
-// obj2 compares equivalent to obj3, should be
-// inserted before
-Util.insertSorted(arrayObj, obj2, (one, two) => one.a - two.a);
-
-Assertions.assertArrayEquals('object test', [obj1, obj2, obj3, obj4], arrayObj);
-
-const checkedCmp = (one, two) => {
-    if (typeof one != 'number' || typeof two != 'number')
-        throw new TypeError('Invalid type passed to checkedCmp');
-
-    return one - two;
-};
-
-let arrayEmpty = [];
-
-// check that no comparisons are made when
-// inserting in a empty array
-Util.insertSorted(arrayEmpty, 3, checkedCmp);
-
-// Insert at the end and check that we don't
-// access past it
-Util.insertSorted(arrayEmpty, 4, checkedCmp);
-Util.insertSorted(arrayEmpty, 5, checkedCmp);
-
-// Some more insertions
-Util.insertSorted(arrayEmpty, 2, checkedCmp);
-Util.insertSorted(arrayEmpty, 1, checkedCmp);
-
-Assertions.assertArrayEquals('checkedCmp test', [1, 2, 3, 4, 5], arrayEmpty);
+import {insertSorted} from 'resource:///org/gnome/shell/misc/util.js';
+
+describe('insertSorted()', () => {
+    it('uses integer sorting by default', () => {
+        const arrayInt = [1, 2, 3, 5, 6];
+        insertSorted(arrayInt, 4);
+        expect(arrayInt).toEqual([1, 2, 3, 4, 5, 6]);
+    });
+
+    it('inserts elements with a custom compare function', () => {
+        const arrayInt = [6, 5, 3, 2, 1];
+        insertSorted(arrayInt, 4, (one, two) => two - one);
+        expect(arrayInt).toEqual([6, 5, 4, 3, 2, 1]);
+    });
+
+    it('inserts before first equal match', () => {
+        const obj1 = {a: 1};
+        const obj2 = {a: 2, b: 0};
+        const obj3 = {a: 2, b: 1};
+        const obj4 = {a: 3};
+
+        const arrayObj = [obj1, obj3, obj4];
+        insertSorted(arrayObj, obj2, (one, two) => one.a - two.a);
+        expect(arrayObj).toEqual([obj1, obj2, obj3, obj4]);
+    });
+
+    it('does not call compare func when array was empty', () => {
+        const cmp = jasmine.createSpy();
+        const empty = [];
+        insertSorted(empty, 3, cmp);
+        expect(cmp).not.toHaveBeenCalled();
+    });
+
+    const checkedCmp = (one, two) => {
+        if (typeof one !== 'number' || typeof two !== 'number')
+            throw new TypeError('Invalid type passed to checkedCmp');
+
+        return one - two;
+    };
+
+    it('does not access past bounds when inserting at end', () => {
+        const array = [3];
+        expect(() => {
+            insertSorted(array, 4, checkedCmp);
+            insertSorted(array, 5, checkedCmp);
+        }).not.toThrow();
+    });
+
+    it('does not access past bounds when inserting at beginning', () => {
+        const array = [4, 5];
+        expect(() => {
+            insertSorted(array, 1, checkedCmp);
+            insertSorted(array, 2, checkedCmp);
+        }).not.toThrow();
+    });
+});